闲扯
双人猜谜游戏??
题面
Solution
我们先康康 $Alice$ 和 $Bob$ 这两个神仙是怎么做到说着说着就知道答案是什么的。
大概思路就是每个人根据之前那个人的回答,在当前的答案集合中,排除掉一些不合法的情况,直到只剩下一个合法答案。
我们设 $dp_{m,i,j}$ 表示当前说了 $m$ 个不知道,两个数分别为 $i,j$ 时,答案能否确定。
我们有第一个转移方程:
表示如果在上一次回答时已经知道答案,那么这一次也知道。
然后我们考虑第二种转移方式:若与 $i,j$ 的乘积(和)相等的其他情况,我们都有 $dp_{m-1},x,y=1$ (此时上一次询问时另一个人就可以确定答案了),且 $dp_{i-1,i,j}=0$ ,我们就可以排除所有情况,确定 $dp_{m,i,j}=1$ 。
这样,我们就可以预处理出 $dp$ 数组。
然后考虑怎么求得答案。
首先,因为题目要求 $m+n$ 最小,我们可以枚举它们的和。
然后又要求 $m$ 最小,所以我们从小往大枚举 $m$ 。
考虑怎么判断 $x,y$ 是否符合要求。
首先,我们肯定要求 $\forall k\in[0,t),dp_{k,x,y}=0$ ,即恰好说了 $t$ 次不知道。
同时,我们还需要判断 $x,y$ 在另一个人那里答案是否唯一(刚好在这一轮确定)。
Code
1 |
|